package pe.edu.upc.dew.grupo3a.web;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.context.support.WebApplicationContextUtils;

import pe.edu.upc.dew.grupo3a.model.Funcion;
import pe.edu.upc.dew.grupo3a.model.Pelicula;
import pe.edu.upc.dew.grupo3a.model.Sala;
import pe.edu.upc.dew.grupo3a.service.FuncionService;
import pe.edu.upc.dew.grupo3a.service.PeliculaService;
import pe.edu.upc.dew.grupo3a.service.SalaService;

/**
 * Servlet implementation class FuncionServLet
 */
public class FuncionServLet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private FuncionService funcionService;
	private SalaService salaService;
	private PeliculaService peliculaService;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public FuncionServLet() {
        super();
        // TODO Auto-generated constructor stub
    }

	@Override
	public void init(ServletConfig config) throws ServletException	{
			this.funcionService = WebApplicationContextUtils
			.getWebApplicationContext(config.getServletContext())
			.getBean("funcionService", FuncionService.class);
			//
			this.salaService = WebApplicationContextUtils
			.getWebApplicationContext(config.getServletContext())
			.getBean("salaService", SalaService.class);
			//
			this.peliculaService = WebApplicationContextUtils
			.getWebApplicationContext(config.getServletContext())
			.getBean("peliculaService", PeliculaService.class);
			
	}    
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		// TODO Auto-generated method stub
		String action = request.getParameter("accion");
		if(action.equals("buscar")){
			List<Funcion> funciones = new ArrayList<Funcion>();
			String condicion = request.getParameter("condicion");
			if(condicion.equals("Sala")){
				String sala = request.getParameter("cmb_SalaSearch");
				funciones = funcionService.getFuncionPorSala(sala);
			} else {
				String pelicula = request.getParameter("cmb_PeliculaSearch");
				funciones = funcionService.getFuncionPorPelicula(pelicula);
			}
			request.setAttribute("funciones", funciones);
		} else if (action.equals("editar")){
			String codigofuncion= request.getParameter("CodigoSelected");
			Funcion funcion = funcionService.getFuncionPorCodigo(codigofuncion);
			request.setAttribute("funcion", funcion);
		}
		else if(action.equals("grabar")|| action.equals("nuevo")){
			String codigofuncion = request.getParameter("codigofuncion");
			String codigosala = request.getParameter("cmb_Sala");
			String codigopelicula = request.getParameter("cmb_Pelicula");
			String horario = request.getParameter("cmb_Horario");
			Double precio = Double.parseDouble(request.getParameter("txt_Precio"));
			int butacasvendidas = Integer.parseInt(request.getParameter("butacasvendidas"));
			boolean subtitulada = Boolean.parseBoolean(request.getParameter("rad_SubtituladaSI"));
			//
			Pelicula pelicula = peliculaService.getPeliculaPorCodigo(codigopelicula);
			Sala sala = salaService.getSalaPorCodigo(codigosala);
			//
			Funcion funcion = new Funcion();
			funcion.setCodigofuncion(codigofuncion);
			funcion.setButacasVendidas(butacasvendidas);
			funcion.setCodigofuncion(codigofuncion);
			funcion.setHorario(horario);
			funcion.setPelicula(pelicula);
			funcion.setSala(sala);
			funcion.setSubtitulada(subtitulada);
			funcion.setPrecio(precio);
			//
			if (funcionService.getFuncionPorCodigo(codigofuncion)!=null){
					funcionService.actualizarFuncion(funcion);
			}
			else {
					funcionService.insertarFuncion(funcion);
			}
		}
		//
		List<Pelicula> peliculasEstreno = peliculaService.getPeliculasPorEstado("Estreno");
		List<Pelicula> peliculasPorEstrenar = peliculaService.getPeliculasPorEstado("Proximamente");
		request.setAttribute("peliculasEstreno", peliculasEstreno);
		request.setAttribute("peliculas", peliculasEstreno);
		request.setAttribute("peliculasPorEstrenar", peliculasPorEstrenar);
		List<Sala> salas = salaService.getSalas();
		request.setAttribute("salas", salas);
		request.setAttribute("accion", action);
		request.getRequestDispatcher("registroFuncion.jsp").forward(request,response);		
	}

}
